<?php
if (!defined('FosfoaSystem')) {
    exit(1);
}
class userModel extends spModel
{
    var $pk = "uid"; // 每个唯一的标志，可以称为主键
    var $table = "user"; // 数据表的名称
    var $verifier = array( // 验证登录信息，由于密码是加密的输入框生成的，所以不需要进行“格式验证”
            "rules" => array( // 规则
                'uname' => array( // 这里是对uname的验证规则
                'notnull' => true, // uname不能为空
                'minlength' => 3, // uname长度不能小于3
                'maxlength' => 12 // uname长度不能大于12
                    ), ), "messages" => array( // 提示信息
                'uname' => array(
                'notnull' => "用户名不能为空",
                'minlength' => "用户名不能少于3个字符",
                'maxlength' => "用户名不能大于20个字符"), ));

    /**
     * 这里我们建立一个成员函数来进行用户登录验证
     *
     * @param uname    用户名
     * @param upass    密码，请注意，本例中使用了加密输入框，所以这里的$upass是经过MD5加密的字符串。
     */
    function userlogin($uname, $upass)
    {
        $conditions = array(
            'uname' => $uname,
            'upass' => md5($upass),
            'enabled' => 1,
            );
        // 检查用户名/密码
        if ($result = $this->find($conditions, null, 'uname,upass')) {
            $ctime = time() + LASTTIME;
            $result = serialize($result);
            $auth_key = auth_key();
            $result = authcode($result, 'ENDODE', $auth_key);
            setcookie("_auth", $result, $ctime, WEBDIR); // 在COOKIE中记录当前用户的信息
            return true;
        } else {
            return false;
        }
    }
    /**
     * 根据COOKIE中的信息返回用户信息
     * 
     * @param $utmp  COOKIE中auth加密字符串
     * @param $stmp  COOKIE中FSESSID字符串
     *        为空就自动获取相关的字符串
     */
    function userinfo($utmp,$stmp)
    {
        $auth=($utmp)?$utmp:$_COOKIE['_auth'];
        if (!isset($auth)) {
            return array();
        }
        $auth = $auth;
        $auth_key = auth_key($stmp);
        $userinfo = authcode($auth, 'DECODE', $auth_key);
        $userinfo = unserialize(stripslashes_value($userinfo));
        $conditions = array(
            'uname' => $userinfo['uname'],
            'upass' => $userinfo['upass'],
            'enabled' => 1,
            );
        $user = $this->spCache(3600 * 24)->find($conditions,NULL,'uid,uname,firstname,lastname,gid,enabled');
        if ($user) {
            return $user;
        } else {
            setcookie('_auth', '', time() - LASTTIME,WEBDIR);
            return array();
        }
    }
    /**
     * 无权限提示及跳转
     */
    function acljump($url = '')
    {
        if ($url == '') {
            $url = spUrl("user", "login");
        }
        //$scriptName = $_SERVER["REQUEST_URI"];
        echo "<html><head>";
        echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">";
        echo "<meta http-equiv='refresh' content='5;url={$url}'>";
        echo "<title>" . T('Permission denied!') . "</title>";
        echo "</head><body>" . T('Permission denied!') ."<a href='{$url}'>请重新登入</a></body></html>";
        exit;
    }

    /**
     *
     * 成功提示程序
     *
     * 应用程序的控制器类可以覆盖该函数以使用自定义的成功提示
     *
     * @param $msg   成功提示需要的相关信息
     * @param $url   跳转地址
     */
    function success($msg, $url)
    {
        echo "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><script>function sptips(){document.write(\"{$msg}\");location.href=\"{$url}\";}</script></head><body onload=\"sptips()\"></body></html>";
        exit;
    }

    function userDetail($uid)
    {
        $condition = array('uid' => $uid);
        $arr = $this->find($condition);
        return $arr;
    }

    function userEnabled()
    {
        return array(
            0 => array('name' => T('On'), 'value' => '1'),
            1 => array('name' => T('Off'), 'value' => '0'),
            );
    }

    function userExist($username, $uid)
    {
        $userExist = $this->find(array('uname' => $username));
        if ($userExist == null) {
            return false;
        }
        if ($userExist['uid'] == $uid) {
            return false;
        }
        return true;
    }

    function emailExist($email, $uid)
    {
        $userExist = $this->find(array('email' => $email));
        if ($userExist == null) {
            return false;
        }
        if ($userExist['uid'] == $uid) {
            return false;
        }
        return true;
    }
}
